/**
 * @FilePath     : /src/lgmg_robots/agv_navigation/agv_navigate/include/agvNavigate/helpInc/check_manager.h
 * @Description  : CheckManager类用于管理检查功能，包括初始化、触发标记丢失和距离超限检测、使能检测、加载新路径和更新实时数据等功能。 
 *                 该类采用单例模式实现，确保在整个应用程序中只有一个CheckManager实例。  
 * @Author       : xiujun.yang
 * @Version      : 1.0.0
 * @LastEditors  : haibo haibo.yang@lgmgim.cn
 * @LastEditTime : 2024-12-19 16:42:22
 * @Copyright (c) 2024 by 临工智能信息科技有限公司, All Rights Reserved. 
**/ 
#pragma once

#include "magic_singleton.h"
#include "mark_check.h"
#include "distance_check.h"
#include "timestamp.h"
// 单实例
#define SingleCheckObj MagicSingleton3<CheckManager>::GetInstance()

class CheckManager {
public:
    CheckManager();
    ~CheckManager() = default;

    // 初始化函数
    bool Init();

    // 是否触发
    bool MarkMissTrigger(std::string& miss_id);

    // 距离检测触发
    bool DisOverLimitTrigger(std::string& msg);

    // 使能检测
    void SetEnable(bool enable);

    // 新路段加载一次
    bool AddNewPath(Path* path, Trajectory* traj);

    // 更新实时数据
    void UpdateProgRunData(USHORT from_node, USHORT to_node,
                            float abs_progress, float prog_percent);

    // 清除检测缓冲区(自动运行时只有当强制结束任务时，才可强制清除)
    void ClearCheckBuffer();

 private:
    bool init_;
    MarkCheck mark_check_;
    DisCheck dis_check_;
};

